https://leetcode-cn.com/problems/top-k-frequent-elements/

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        HashMap<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if(!map.containsKey(nums[i])){
                map.put(nums[i],1);
            }else{
                int value = map.get(nums[i]);
                map.remove(nums[i]);
                map.put(nums[i],value+1);
            }
        }

        //思路很好
        // Set<Map.Entry<Integer,Integer>> set = map.entrySet();
        // Object[] arrays = set.toArray();
        // PriorityQueue<Map.Entry<Integer,Integer>> minHeap = new PriorityQueue(k, new Comparator<Map.Entry<Integer,Integer>>(){
        //     @Override
        //     public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
        //         return o1.getValue()-o2.getValue();
        //     }
        // });
        // for (int i = 0; i < arrays.length; i++) {
        //     if(minHeap.size() < k){
        //         minHeap.offer((Map.Entry<Integer, Integer>) arrays[i]);
        //     }else{
        //         int value = minHeap.peek().getValue();
        //         if(value < ((Map.Entry<Integer,Integer>)arrays[i]).getValue()){
        //             minHeap.poll();
        //             minHeap.offer((Map.Entry<Integer, Integer>) arrays[i]);
        //         }
        //     }
        // }





        PriorityQueue<Map.Entry<Integer,Integer>> minHeap = new PriorityQueue(k, new Comparator<Map.Entry<Integer,Integer>>(){
            @Override
            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
                return o1.getValue()-o2.getValue();
            }
        });
        for (Map.Entry<Integer,Integer> key_value : map.entrySet()) {
            if(minHeap.size() < k){
                minHeap.offer(key_value);
            }else{
                int value = minHeap.peek().getValue();
                if(value < key_value.getValue()){
                    minHeap.poll();
                    minHeap.offer(key_value);
                }
            }
        }




        // PriorityQueue<Integer> minHeap = new PriorityQueue<>(k, new Comparator<Integer>() {
        //     @Override
        //     public int compare(Integer o1, Integer o2) {
        //         return map.get(o1)-map.get(o2);
        //     }
        // });
        // for (Integer key : map.keySet()) {
        //     if(minHeap.size() < k){
        //         minHeap.offer(key);
        //     }else{
        //         int value = map.get(minHeap.peek());
        //         if(value < map.get(key)){
        //             minHeap.poll();
        //             minHeap.offer(key);
        //         }
        //     }
        // }





        int size = minHeap.size();
        int[] array = new int[size];
        while(!minHeap.isEmpty()){
            size = minHeap.size();
            for (int i = size-1; i >= 0 ; i--) {
                array[i] = minHeap.poll().getKey();
            }
        }
        return array;
    }
}